home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Games Collection 1 / software vault.zip / software vault / CDR10 / YICN23.ZIP / SOURCE / YFEDIT.CPP < prev    next >
C/C++ Source or Header  |  1993-03-06  |  6KB  |  148 lines

  1. #include "gadgets.h"
  2. #include "yakfont.h"
  3. #include "xrect.h"
  4. #include <stdlib.h>
  5. #include <conio.h>
  6.  
  7. #define QUIT 1
  8. #define SAVE 2
  9.  
  10. extern yakMouse mouse;
  11.  
  12. byte grid[8][16];
  13.  
  14.  
  15. void drawGrid(yakFont * myYakFont)
  16. {
  17.   mouse.hide();
  18.  
  19.   for(int heightCounter = 0; heightCounter < myYakFont->charHeight; ++heightCounter)
  20.     for(int widthCounter = 0; widthCounter < myYakFont->charWidth; ++widthCounter)
  21.       x_rect_fill(widthCounter*15 +1, heightCounter*15 + 1, widthCounter*15 + 14, heightCounter*15 + 14,
  22.           VisiblePageOffs, (grid[widthCounter][heightCounter]) ? 15 : 0);
  23.   mouse.show();
  24. }
  25.  
  26. void drawFont(yakFont *myFont)
  27. {
  28.   mouse.hide();
  29.   int charsInARow = 150 / (myFont->charWidth + 1);
  30.   for(byte fontCounter = 0; fontCounter < myFont->numberOfChars; ++ fontCounter)
  31.     x_bgprintf(150 + ((fontCounter) % charsInARow) * (myFont->charWidth + 1),
  32.            ((fontCounter) / charsInARow) * (myFont->charHeight + 1),
  33.            VisiblePageOffs, 15, 0, "%c", fontCounter + myFont->startChar);
  34.   mouse.show();
  35. }
  36.  
  37. void toGrid(yakFont * myFont, byte inChar)
  38. {
  39.   if ((inChar < myFont->startChar) || (inChar > (myFont->startChar + myFont->numberOfChars)))
  40.     return;
  41.   for (int heightCounter = 0; heightCounter < myFont->charHeight; ++heightCounter)
  42.     for (int widthCounter = 0; widthCounter < 8; ++widthCounter)
  43.       grid[widthCounter][heightCounter] = (myFont->fontData[4 + (inChar - myFont->startChar)*myFont->charHeight + heightCounter] & (1 << widthCounter)) ? 1 : 0;
  44. }
  45.  
  46. void fromGrid(yakFont * myFont, byte outChar)
  47. {
  48.   if ((outChar < myFont->startChar) || (outChar > (myFont->startChar + myFont->numberOfChars)))
  49.     return;
  50.   for (int heightCounter = 0; heightCounter < myFont->charHeight; ++heightCounter)
  51.   {
  52.     myFont->fontData[4 + (outChar - myFont->startChar)*myFont->charHeight + heightCounter] = 0;
  53.     for (int widthCounter = 0; widthCounter < 8; ++widthCounter)
  54.       myFont->fontData[4 + (outChar - myFont->startChar)*myFont->charHeight + heightCounter] |= grid[widthCounter][heightCounter] << widthCounter;
  55.   }
  56. }
  57.  
  58.  
  59. void zapGrid(yakFont * myYakFont, char workingChar)
  60. {
  61.   grid[(int)(mouse.x() / 15)][(int)(mouse.y() / 15)] = (mouse.isPressed(yakMouse::leftButton)) ? 1 : 0;
  62.   drawGrid(myYakFont);
  63.   fromGrid(myYakFont, workingChar);
  64.   drawGrid(myYakFont);
  65.   drawFont(myYakFont);
  66. }
  67.  
  68.  
  69. void main(int argCount, char **argVector)
  70. {
  71.   yakFont * myYakFont = NULL;
  72.   if (argCount == 2)
  73.     myYakFont = new yakFont(argVector[1]);
  74.   else if (argCount == 5)
  75.     myYakFont = new yakFont(atoi(argVector[2]), atoi(argVector[3]), atoi(argVector[4]), atoi(argVector[5]));
  76.   else
  77.   {
  78.     cout << "\n\nYakFont EDitor v1.0 // 21 Nov 92 by V. Putz\nUsage: \n";
  79.     cout << "C> yfed <filename>        to edit a font file\n";
  80.     cout << "C> yfed <filename> <stch> <width> <height> <numchars>\n";
  81.     cout << "     where <stch> is the ascii code of the first character,\n";
  82.     cout << "           <width> is the width of the characters (<= 8),\n";
  83.     cout << "           <height> is the height of the character in pixels.\n";
  84.     cout << "       and <numchars> is the number of characters in your set.\n";
  85.     exit(0);
  86.   }
  87.   x_set_mode(3,376);
  88.   x_text_init();
  89.   mouse.init();
  90.   mouse.hide();
  91.   yakLib myYakLib("draw");
  92.   gadgetList myGadgetList;
  93.   myGadgetList.add(new gadgetNode(new button(0,0, 0, SAVE, "sbutton", icon::normal, &myYakLib),
  94.                    new gadgetNode(new button(0,20, 0, QUIT, "qbutton", icon::normal, &myYakLib),
  95.                    NULL)));
  96.   myYakFont->use();
  97.   int charsInARow = 150 / (myYakFont->charWidth + 1);
  98.   x_rect_fill(150,0,150 + charsInARow * (myYakFont->charWidth +1), (myYakFont->numberOfChars / charsInARow + 1) * (myYakFont->charHeight + 1),
  99.           VisiblePageOffs, 20);
  100.   drawFont(myYakFont);
  101.   x_rect_fill(0,0, (myYakFont->charWidth) * 15, (myYakFont->charHeight)*15,
  102.           VisiblePageOffs, 20);
  103.   myGadgetList.draw(300,190);
  104.   char workingChar = myYakFont->startChar;
  105.   toGrid(myYakFont, workingChar);
  106.   drawGrid(myYakFont);
  107.   x_set_font(FONT_8x8);
  108.   x_bgprintf(150,100, VisiblePageOffs, 15, 0, "  Font name: %s", argVector[1]);
  109.   x_bgprintf(150,110, VisiblePageOffs, 15, 0, " Start char: %d", myYakFont->startChar);
  110.   x_bgprintf(150,120, VisiblePageOffs, 15, 0, " Char Width: %d", myYakFont->charWidth);
  111.   x_bgprintf(150,130, VisiblePageOffs, 15, 0, "Char Height: %d", myYakFont->charHeight);
  112.   x_bgprintf(150,140, VisiblePageOffs, 15, 0, " # of Chars: %d", myYakFont->numberOfChars);
  113.   myYakFont->use();
  114.   int exit = 0;
  115.   mouse.show();
  116.   while (exit != QUIT)
  117.   {
  118.     exit = myGadgetList.status();
  119.     if (kbhit())
  120.     {
  121.       char tempChar = getch();
  122.       fromGrid(myYakFont, workingChar);
  123.       workingChar = ((tempChar < myYakFont->startChar) || (tempChar > (myYakFont->startChar + myYakFont->numberOfChars))) ?
  124.             workingChar:
  125.             tempChar;
  126.       toGrid(myYakFont, workingChar);
  127.       drawGrid(myYakFont);
  128.     }
  129.     if (mouse.isInBox(0,0,myYakFont->charWidth*15, (myYakFont->charHeight)*15)
  130.      &&(mouse.isPressed(yakMouse::eitherButton)))
  131.       zapGrid(myYakFont, workingChar);
  132.     if (mouse.isInBox(150,0,150 + charsInARow * (myYakFont->charWidth +1), (myYakFont->numberOfChars / charsInARow + 1) * (myYakFont->charHeight + 1))
  133.      &&(mouse.isPressed(yakMouse::leftButton)))
  134.     {
  135.       char tempChar = myYakFont->startChar +(charsInARow*(int)(mouse.y()/(myYakFont->charHeight + 1)) + (int)(mouse.x() - 150)/(myYakFont->charWidth + 1));
  136.       fromGrid(myYakFont, workingChar);
  137.       workingChar = ((tempChar < myYakFont->startChar) || (tempChar > (myYakFont->startChar + myYakFont->numberOfChars))) ?
  138.             workingChar:
  139.             tempChar;
  140.       toGrid(myYakFont, workingChar);
  141.       drawGrid(myYakFont);
  142.     }
  143.     if (exit == SAVE)
  144.       myYakFont->save(argVector[1]);
  145.   }
  146.   mouse.remove();
  147.   x_text_mode();
  148. }